﻿using System;
using System.Drawing;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;

namespace sy4_3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // 绑定共享事件（所有单选按钮绑定同一个CheckedChanged事件，提升复用性）
            rbSin.CheckedChanged += new EventHandler(radioButton_CheckedChanged);
            rbCos.CheckedChanged += new EventHandler(radioButton_CheckedChanged);
            rbTan.CheckedChanged += new EventHandler(radioButton_CheckedChanged);

            // 所有复选框绑定同一个CheckedChanged事件，统一处理格式
            cbBold.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
            cbItalic.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
            cbRed.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
        }

        /// <summary>
        /// 窗体加载事件：初始化参数框默认值（与实验要求一致）
        /// </summary>
        private void Form1_Load(object sender, EventArgs e)
        {
            txtParam.Text = "3.14159";
            // 初始触发一次计算，显示默认参数的结果
            radioButton_CheckedChanged(sender, e);
        }

        /// <summary>
        /// 单选按钮事件：计算三角函数结果（共享事件）
        /// </summary>
        private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            double x, y;
            FontStyle fontStyle = FontStyle.Regular;

            try
            {
                // 尝试将参数转换为double类型，非数字则触发catch
                x = double.Parse(txtParam.Text.Trim());
            }
            catch
            {
                MessageBox.Show("参数必须是数字！", "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtParam.Focus();
                txtParam.SelectAll();
                return;
            }

            // 根据选中的单选按钮计算对应三角函数值
            if (rbSin.Checked)
            {
                y = Math.Sin(x); // 正弦函数
            }
            else if (rbCos.Checked)
            {
                y = Math.Cos(x); // 余弦函数
            }
            else // rbTan.Checked
            {
                y = Math.Tan(x); // 正切函数
            }

            // 结果四舍五入保留2位小数（实验核心要求）
            lblResult.Text = Math.Round(y, 2).ToString();

            // 同步更新格式（避免切换函数后格式丢失）
            checkBox_CheckedChanged(sender, e);
        }

        /// <summary>
        /// 复选框事件：设置结果文本格式（粗体、斜体、红色）
        /// </summary>
        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {
            FontStyle fontStyle = FontStyle.Regular;

            // 粗体设置（选中则添加粗体样式）
            if (cbBold.Checked)
            {
                fontStyle |= FontStyle.Bold;
            }

            // 斜体设置（选中则添加斜体样式）
            if (cbItalic.Checked)
            {
                fontStyle |= FontStyle.Italic;
            }

            // 应用字体样式
            lblResult.Font = new Font(lblResult.Font.Name, lblResult.Font.Size, fontStyle);

            // 字体颜色设置（选中红色则变红，否则黑色）
            lblResult.ForeColor = cbRed.Checked ? Color.Red : Color.Black;
        }

        /// <summary>
        /// 参数文本框Leave事件：失去焦点时触发计算（可选增强，符合实验4-4提示逻辑）
        /// </summary>
        private void txtParam_Leave(object sender, EventArgs e)
        {
            radioButton_CheckedChanged(sender, e);
        }
    }
}